package com.atguigu.bigdata.scala.chapter06

// 伴生类
class Scala12_Object_Single {

}

// 伴生对象
object Scala12_Object_Single {
    def main(args: Array[String]): Unit = {

        // TODO 面向对象编程 - 单例对象

        // 所谓的单例对象，其实就是在整个应用程序中，指定对象只有一个，不能有多个。

        // java如何实现单例对象？
        // 1. 类的构造方法私有化
        // 2. 提供一个公共的，静态方法用于返回该类的对象
        // 3. 返回的对象不能直接new，可以采用懒汉式，饿汉式。

        // scala中如何让构造方法私有化?
        // 在构造方法前增加private关键字
        // scala是一个完全面向对象的语言，所以没有静态语法

        // scala中如何创建单例对象？
        // 使用object关键字就可以声明单例对象

        // object关键字的作用？
        // 顶层的类如果使用 object关键字声明，那么编译时，会产生两个类
        // 第一个类就是本身的类 ： Scala12_Object_Single
        // 第二个类就是单例对象的类： Scala12_Object_Single$
        // 单例对象的类的目的就是为了创建单例

        // object语法是用于模仿java中的静态语法： 类名.属性（方法）
        // 这个单例对象是伴随着类所产生的一个对象，称之为伴生对象
        // 如果class关键字声明的类和object声明的类名称一样，那么class声明的类称之为伴生类
        // 一般情况下，将成员方法都声明在伴生类，需要构建类的对象进行访问
        // 将静态方法（属性）声明在伴生对象中，通过类名进行访问，模仿静态语法
        //Scala12_Object_Single.main()

    }
    class User private {

    }

}

class XXXX {

}